void main() {
  /**
   * Dart 数据类型 - LIST
   * Dart中的数组，有List对象标识。list有两种声明方式
   *    1. 字面量方式
   *       1. List list = [1, false, '01', 0.2 ]; // 不限制元素数据的类型
   *       2. List list = <int>[1, 2, 3, 4]; // 限制元素数据的类型
   *    2. 构造函数方式
   *       1. List list = new List.empty(growable:true); // 不限制长度空列表
   *       2. List list = new List.filled(5, 0, growable:true); // 限制长度空列表
   *       3. List list = new List.generate(5, (index) => index * 2); // 生成列表
   *       4. List list = new List.from([1, 2, 3, 4]); // 从其他列表中生成列表
   *    3. 扩展操作符
   *       1. List list = [1, 2, 3, 4];
   *       2. List list2 = [...list, 5, 6, 7, 8];
   *       3. List list3 = [0, ...list, 9];
   *       4. List list4 = [0, ...list, 9, ...list2];
   *   4. 常用API
   *      1. 列表的长度(length)
   *      2. 列表的添加(add)
   *      3. 列表的插入(insert)
   *      4. 列表的删除(remove)
   *      5. 列表的删除At(removeAt)
   *      6. 列表的清空(clear)
   *      7. 列表的排序(sort)
   *      8. 列表的反转(reverse)
   *      9. 列表的截取(sublist)
   */
  // 1. 字面量方式
  List list = [1, false, '01', 0.2]; // 不限制元素数据的类型
  print('不限制元素数据的类型: $list');
  List list2 = <int>[1, 2, 3, 4]; // 限制元素数据的类型
  print('限制元素数据的类型: $list2');

  // 2. 构造函数方式
  List list3 = new List.empty(growable: true); // 不限制长度空列表
  print('不限制长度空列表: $list3');
  List list4 = new List.filled(5, null); // 限制长度空列表
  // list4[6] = 0; // 超出长度会报错，但是不会影响列表的长度，列表的长度为5，但是可以访问list4[6
  print('限制长度空列表: $list4');
  List list5 = new List.generate(5, (index) => index * 2); // 生成列表
  print('生成列表: $list5');

  // 3. 扩展操作符
  List list6 = [1, 2, 3, 4];
  List list7 = [...list6, 5, 6, 7, 8];
  List list8 = [0, ...list6, 9];

  // 4. 常用API
  // 4.1 列表的长度
  print(list.length); // 4
  print(list2.length); // 4
  print(list3.length); // 0
  print(list4.length); // 5
  print(list5.length); // 5
  print(list6.length); // 4
  print(list7.length); // 8
  print(list8.length); // 5

  // 4.2 列表的添加
  list.add(5);
  list.add(6);
  list.add(7);
  list.add(8);
  print(list); // [1, false, '01', 0.2, 5, 6, 7, 8]

  // 4.3 列表的插入 insert 下标 值
  list.insert(0, "11232323");
  list.insert(1, 1);
  list.insert(2, 2);
  print('insert: $list');

  // 4.4 列表的删除
  list.remove(1);
  print('remove: $list');

  // 4.5 列表的删除At 下标
  list.removeAt(0);
  print('removeAt: $list');

  // 4.6 列表的清空
  list.clear();
  print('clear: $list');

  // 4.7 列表的排序
  List list9 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
  list9.sort();

  /// 4.8 连接join
  List list10 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];
  String list11 = list10.join('——');
  print('join: $list11');

}
